package com.gjintel.framework.role.service;

import java.util.List;

import com.gjintel.framework.menu.model.RoleModel;
import com.gjintel.framework.role.model.ProjectOperation;
import com.gjintel.framework.role.model.Role;
import com.gjintel.framework.user.model.User;
import com.gjintel.framework.user.model.UserRole;
import com.gjintel.sdk.base.dao.Page;
import com.gjintel.sdk.base.dao.Sort;
import com.gjintel.sdk.base.service.IBaseService;

public interface IRoleService extends IBaseService {
	/**
	 * @description 获得所有的角色信息
	 * @author fengya
	 * @date 2015-8-3 下午01:37:36
	 * @return void
	 */
	public List<Role> findAll();
	
	
	

	/**
	 * @description 根据角色信息进行查询和分页、排序得到角色信息
	 * @author fengya
	 * @date 2015-7-23 下午04:37:33
	 * @param page
	 * @param role
	 * @param sort
	 * @return void
	 */
	@SuppressWarnings("unchecked")
	void findAll(Page page, Role role, Sort sort);

	/**
	 * @description 根据角色ID进行删除角色信息
	 * @author fengya
	 * @date 2015-7-23 下午04:38:03
	 * @param deleteIds
	 * @throws Exception
	 * @return void
	 */
	void removeData(String deleteIds) throws Exception;

	/**
	 * @description 绑定角色与菜单信息
	 * @author fengya
	 * @date 2015-8-3 上午10:51:53
	 * @param roleId
	 * @param modelIdStr
	 * @return
	 * @return List<RoleModel>
	 */
	List<RoleModel> bindMenu(User user,String roleId, String modelIdStr);

	/**
	 * @description 得到角色绑定的菜单信息
	 * @author fengya
	 * @date 2015-8-3 上午10:52:21
	 * @param roleId
	 * @return
	 * @return List<RoleModel>
	 */
	List<RoleModel> getMenuByRoleId(String roleId);

	/**
	 * @description 删除角色绑定的用户
	 * @author fengya
	 * @date 2015-8-3 上午10:52:42
	 * @param roleId
	 * @param userIdStr
	 * @return void
	 */
	void removeBindUser(String roleId, String userIdStr);
	
	/**
	 * @description 获得出去超级管理员之外的角色信息
	 * @date 2016-3-20 下午01:37:36
	 * @return void
	 */
	public List<Role> findRoleListExcludeAdmin(String bidderId);
	
	/**
	 * @description 根据用户id获取使用后的所有角色 
	 * @author wei 
	 * @date 2016-8-17
	 * @param userIdStr
	 * @return
	 */
	public List<Role> findRolesByUserId(String userIdStr);
	
	/**
	 * @description 根据角色id获取此角色的所有用户集合 
	 * @author wei 
	 * @date 2016-8-17
	 * @param RoleId
	 * @return
	 */
	public List<User> findUserByRoleId(String RoleId);
	
	/**
	 * @description 判断用户 的角色权限
	 * @author wei 
	 * @date 2016-8-18
	 * @param userId
	 * @return
	 */
	public boolean isPrivilege(String userId,String roleIds);
	
	
	/**
	 * @description 根据角色id和项目状态获取操作权限集合
	 * @author wei 
	 * @date 2016-9-30
	 * @param roleId
	 * @param status
	 * @return
	 */
	public List<ProjectOperation> findOperationByRoleIdAndStatus(String roleId,String status,String workflowKey);
	
	/**
	 * @description 根据角色id和roleId获取用户权限
	 * @author shy 
	 * @date 2016-9-30
	 * @param roleId
	 * @param status
	 * @return
	 */
	public UserRole findUserRole(String roleStr,String userId);
	
	/**
	 * @description 获取除超级用户外的所有角色
	 * @author shy
	 * @date 2016-9-25
	 * @return
	 * @return String
	 */
	public List<Role> getRoleListExcludeAdmin();
}
